//
//  HomeTableViewController.swift
//  微博001
//
//  Created by apple on 15/12/12.
//  Copyright © 2015年 apple. All rights reserved.
//

import UIKit

import AFNetworking
import SVProgressHUD

private let HomeCellId = "HomeCellId"

class HomeTableViewController: BaseTableViewController {
    
    private lazy var statuses = [Status]()
    //自定义下拉刷新
//    private lazy var refreshView: WBRefreshControl = WBRefreshControl()

    override func viewDidLoad() {
        super.viewDidLoad()
         //没有登录的情况下 显示访客视图
        if !UserAccountMode().userLogin {
            visitorLoginView?.setUPInfo("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
            return
        }

        //注册cell
        prepareTableView()

//        loadData()
        
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        loadData()
    }
    
    //注册cell
    private func prepareTableView() {
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
        
        //修改tableView固定高度
        //希望tableView 能够自动计算行高 需要设置两个关键的属性
        //1/设置预估行高 尽量的接近真实的行高, 能够提高效率
        //tabelView 能够自动计算行高, 关键条件之一 就是contentView必须添加约束
//        tableView.rowHeight = 200
        tableView.estimatedRowHeight = 300
        //2 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension

        //设置分割线的样式
        tableView.separatorStyle = .None
        
        //设置下来刷新
//        refreshControl = UIRefreshControl()
        
        //绑定事件
//        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        //添加自定义下拉刷新控件
        tableView.addSubview(refreshView)
        
        refreshView.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        //设置tableView的tabelFooterView
        tableView.tableFooterView = indicatorView
    }
    
    @objc func loadData() {
        //since_id和max_id是互斥条件  有且只能传一个
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        
        if indicatorView.isAnimating() {
            max_id = statuses.last?.id ?? 0
        }else {
            since_id = statuses.first?.id ?? 0
        }
        
        //使用viewmodel 获取网络数据
        StatusListViewModel.loadHomePageData(since_id,max_id:max_id) { (statuses) -> () in
            //网络加载完毕就直接关闭动画
//            self.refreshControl?.endRefreshing()
            self.refreshView.endefreshing()
            
            //如果返回的数据为空 直接return
            guard let list = statuses else {
                return
            }
            //下来刷新新数据的操作
            if since_id > 0 {
                self.statuses = list + self.statuses
//                if self.tableView.dragging {
//                    return
//                }
            } else if max_id > 0 {
                //上那刷新
                self.statuses += list
                //数据加载完毕应该结束动画,不然只能加载一页数据
                self.indicatorView.stopAnimating()
            } else{
                //首次加载
                  self.statuses = list
            }

            //执行刷新
            self.tableView.reloadData()

        }
    }
    //懒加载小菊花
    private lazy var indicatorView: UIActivityIndicatorView = {
       
        let i = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
        //开始动画
//        i.startAnimating()
        return i
    }()
}

//tableView 数据源的协议方法
extension HomeTableViewController{
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
        
        cell.status = statuses[indexPath.row]
        
//        cell.textLabel?.text = statuses[indexPath.row].text
//        print(statuses[indexPath.row].imageUILs!.count)
        
        
        if !indicatorView.isAnimating() && indexPath.row == self.statuses.count - 1  {
            //滑动到最后一行  让自动加载数据
            //在加载数据之前加载小菊花
            indicatorView.startAnimating()
            loadData()
        }

        return cell
    }
    
    
}
